<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>构造函数与class语法糖中使用构造器的方式</title>
</head>
<body>
    <script>
        // function User(name,age) {
        //     let data = {name,age};
        //     Object.defineProperties(this,{
        //         name : {
        //             get(){
        //                 return data.name;
        //             },
        //             set(value){
        //                 if(value.trim() == '' || value.length > 20){
        //                     throw new Error('用户名不合法');
        //                 }
        //                 data.name = value;
        //             }
        //         },
        //         age : {
        //             get(){
        //                 return data.age;
        //             },
        //             set(value){
        //                 data.age = value;
        //             }
        //         }
        //     });
        // }
        // let lisi = new User("李四",19);
        // // lisi.name = "";
        // lisi.name = "后盾人";
        // console.log(lisi.name);



        // 类相当于构造函数的语法糖形式
        // class User{
        //     constructor(name,age){
        //         this.data = {name,age};
        //     };
        //     get name(){
        //         return this.data.name;
        //     }
        //     set name(value){
        //         if(value.trim() == '' || value.length > 20){
        //             throw new Error('用户名不合法');
        //         }
        //         this.data.name = value;
        //     }
        //     get age(){
        //         return this.data.age;
        //     }
        //     set age(value){
        //         this.data.age = value;
        //     }
        // }
        // let lisi = new User("李四",18);
        // lisi.name = "xiasnn";
        // console.log(lisi.name);


        const DATA = Symbol();
        class User{
            constructor(name,age){
                this[DATA] = {name,age};
            };
            get name(){
                return this[DATA].name;
            }
            set name(value){
                if(value.trim() == '' || value.length > 20){
                    throw new Error('用户名不合法');
                }
                this[DATA].name = value;
            }
            get age(){
                return this[DATA].age;
            }
            set age(value){
                this[DATA].age = value;
            }
        }
        let lisi = new User("李四",18);
        lisi.name = "xiasnn";
        console.log(lisi.name);
    </script>
</body>
</html>